Julia 并行计算
多线程并行
@threads
循环上并行
循环上并行是一种比较高级的模式,假定循环中的每一次都不相关。
@spawn
任务级并行
任务级并行与 Go 和 Cilk 等语言相似,由语言的运行时对任务池来调度。
这种方法的好处是 不需要真正创建新的线程(绿色线程),以避免操作系统不停在不同的线程中切换,这对数值计算的性能有比较大的影响。
此外,因为任务是动态调度的,可能存在一定的冗余,但是有的时候也更快。
原子
原子操作可以保证只有一个线程能使用某一个堆上的数据。
acc = Atomic{Int64}(0)
@threads for i in 1:10_000
atomic_add!(acc, 1)
end
acc
锁
- 自旋锁
SpinLock
:上锁后别人不能再使用,自己也不能再次上锁 - 二次进入锁
ReentrantLock
:自己可以上锁两次